Imports System.Data.SqlClient

Public Class cls_tercerorelacion_

    Implements ICloneable

#Region "Variables ..."
    Private int_idtercerorelacion As Integer = 0
    Private int_tipo As enu_tiporelacion = enu_tiporelacion.Recomendado
    Private int_idtercerotiporelacion As Integer = 0
    Private int_idtercero As Integer = 0
    Private str_observaciones As String = ""
    Private int_idtercerocontacto As Integer = 0
    Private dte_fecha As Date


    Private obj_tercerotiporelacion As cls_tercerotiporelacion_ = Nothing
    Private obj_tercerocontacto As cls_tercero_ = Nothing

    Private col_Items As Collections.Generic.List(Of cls_tercerorelacion_) = Nothing
#End Region

    Public Enum enu_tiporelacion
        Recomendado = 2
        Definido = 0
        Personalizado = 1
    End Enum

    Public Overrides Function ToString() As String
        Dim obj_config_parametro As New cls_config_parametro_
        obj_config_parametro.Buscar("001002")

        Select Case int_tipo
            Case enu_tiporelacion.Definido

                'Return "(" & int_tipo.ToString & ") - " & tercerotiporelacion.ToString

                Select Case obj_config_parametro.valor
                    Case "Nombre#########(15) - sigla(5)"
                        Return tercerotiporelacion.ToString.PadRight(15) & " - " & int_tipo.ToString.PadRight(5)
                    Case "sigla(5) - Nombre#########(15)"
                        Return int_tipo.ToString.PadRight(5) & " - " & tercerotiporelacion.ToString.PadRight(15)
                    Case "Nombre - sigla"
                        Return tercerotiporelacion.ToString & " - " & int_tipo.ToString
                    Case "sigla - Nombre"
                        Return int_tipo.ToString & " - " & tercerotiporelacion.ToString
                    Case Else
                        Return int_tipo.ToString & " - " & tercerotiporelacion.ToString
                End Select


            Case enu_tiporelacion.Recomendado
                'Return "(" & int_tipo.ToString & ") - " & tercerocontacto.ToString

                Select Case obj_config_parametro.valor
                    Case "Nombre#########(15) - sigla(5)"
                        Return tercerocontacto.ToString.PadRight(15) & " - " & int_tipo.ToString.PadRight(5)
                    Case "sigla(5) - Nombre#########(15)"
                        Return int_tipo.ToString.PadRight(5) & " - " & tercerocontacto.ToString.PadRight(15)
                    Case "Nombre - sigla"
                        Return tercerocontacto.ToString & " - " & int_tipo.ToString
                    Case "sigla - Nombre"
                        Return int_tipo.ToString & " - " & tercerocontacto.ToString
                    Case Else
                        Return int_tipo.ToString & " - " & tercerocontacto.ToString
                End Select
            Case enu_tiporelacion.Personalizado
                'Return "(" & int_tipo.ToString & ") - " & observaciones

                Select Case obj_config_parametro.valor
                    Case "Nombre#########(15) - sigla(5)"
                        Return observaciones.PadRight(15) & " - " & int_tipo.ToString.PadRight(5)
                    Case "sigla(5) - Nombre#########(15)"
                        Return int_tipo.ToString.PadRight(5) & " - " & observaciones.PadRight(15)
                    Case "Nombre - sigla"
                        Return observaciones & " - " & int_tipo.ToString
                    Case "sigla - Nombre"
                        Return int_tipo.ToString & " - " & observaciones
                    Case Else
                        Return int_tipo.ToString & " - " & observaciones
                End Select
            Case Else
                Return ""
        End Select
    End Function

#Region "Propiedades ..."
    ReadOnly Property This
        Get
            Return Me
        End Get
    End Property
    ReadOnly Property ThisDescripcion As String
        Get
            Return Me.ToString
        End Get
    End Property
    ReadOnly Property pKey
        Get
            Return idtercerorelacion
        End Get
    End Property
    Property idtercerorelacion() As Integer
        Get
            idtercerorelacion = int_idtercerorelacion
        End Get
        Set(ByVal value As Integer)
            int_idtercerorelacion = value
        End Set
    End Property
    Property tipo() As enu_tiporelacion
        Get
            tipo = int_tipo
        End Get
        Set(ByVal value As enu_tiporelacion)
            int_tipo = value
        End Set
    End Property
    Property idtercerotiporelacion() As Integer
        Get
            idtercerotiporelacion = int_idtercerotiporelacion
        End Get
        Set(ByVal value As Integer)
            int_idtercerotiporelacion = value
        End Set
    End Property
    Property idtercero() As Integer
        Get
            idtercero = int_idtercero
        End Get
        Set(ByVal value As Integer)
            int_idtercero = value
        End Set
    End Property
    Property idtercerocontacto() As Integer
        Get
            idtercerocontacto = int_idtercerocontacto
        End Get
        Set(ByVal value As Integer)
            int_idtercerocontacto = value
        End Set
    End Property
    Property observaciones() As String
        Get
            observaciones = str_observaciones
        End Get
        Set(ByVal value As String)
            str_observaciones = value
        End Set
    End Property
    Property fecha As Date
        Get
            fecha = dte_fecha
        End Get
        Set(ByVal value As Date)
            dte_fecha = value
        End Set
    End Property
    Property tercerotiporelacion() As cls_tercerotiporelacion_
        Get
            If IsNothing(obj_tercerotiporelacion) Then
                obj_tercerotiporelacion = New cls_tercerotiporelacion_
                If Not obj_tercerotiporelacion.Buscar(idtercerotiporelacion) Then
                    obj_tercerotiporelacion = Nothing
                End If
            End If
            tercerotiporelacion = obj_tercerotiporelacion
        End Get
        Set(ByVal value As cls_tercerotiporelacion_)
            obj_tercerotiporelacion = value
        End Set
    End Property
    Property tercerocontacto() As cls_tercero_
        Get
            If IsNothing(obj_tercerocontacto) Then
                obj_tercerocontacto = New cls_tercero_
                If Not obj_tercerocontacto.Buscar(idtercerocontacto) Then
                    obj_tercerocontacto = Nothing
                End If
            End If
            tercerocontacto = obj_tercerocontacto
        End Get
        Set(ByVal value As cls_tercero_)
            obj_tercerocontacto = value
        End Set
    End Property
    Property Items() As Collections.Generic.List(Of cls_tercerorelacion_)
        Get
            Items = col_Items
        End Get
        Set(ByVal value As Collections.Generic.List(Of cls_tercerorelacion_))
            col_Items = value
        End Set
    End Property
#End Region

    Private Sub CargarColeccion(ByVal obj_Reader As SqlDataReader)
        col_Items = New Collections.Generic.List(Of cls_tercerorelacion_)
        While obj_Reader.Read()
            Dim Elemento As New cls_tercerorelacion_
            Elemento.int_idtercerorelacion = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercerorelacion")))

            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("tipo"))) = False Then
                Elemento.int_tipo = (obj_Reader.GetValue(obj_Reader.GetOrdinal("tipo")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercerotiporelacion"))) = False Then
                Elemento.int_idtercerotiporelacion = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercerotiporelacion")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercero"))) = False Then
                Elemento.int_idtercero = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercero")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones"))) = False Then
                Elemento.str_observaciones = (obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercerocontacto"))) = False Then
                Elemento.int_idtercerocontacto = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercerocontacto")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fecha"))) = False Then
                Elemento.dte_fecha = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fecha")))
            End If
            col_Items.Add(Elemento)
        End While
    End Sub

    Private Sub CargarVariables(ByVal obj_Reader As SqlDataReader)
        obj_Reader.Read()
        int_idtercerorelacion = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercerorelacion")))

        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("tipo"))) = False Then
            int_tipo = (obj_Reader.GetValue(obj_Reader.GetOrdinal("tipo")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercerotiporelacion"))) = False Then
            int_idtercerotiporelacion = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercerotiporelacion")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercero"))) = False Then
            int_idtercero = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercero")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones"))) = False Then
            str_observaciones = (obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercerocontacto"))) = False Then
            int_idtercerocontacto = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercerocontacto")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fecha"))) = False Then
            dte_fecha = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fecha")))
        End If
    End Sub

    Public Function Nuevo(Optional ByVal ObtenerID As Boolean = False) As Boolean
        Nuevo = False
        Dim obj_Conexion As New cls_Conexion
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "tercerorelacion__Nuevo"
                .Parameters.Add("@tipo", SqlDbType.Int).Value = int_tipo
                .Parameters.Add("@idtercerotiporelacion", SqlDbType.Int).Value = IIf(int_idtercerotiporelacion = 0, DBNull.Value, int_idtercerotiporelacion)
                .Parameters.Add("@idtercero", SqlDbType.Int).Value = int_idtercero
                .Parameters.Add("@observaciones", SqlDbType.NVarChar).Value = str_observaciones
                .Parameters.Add("@idtercerocontacto", SqlDbType.Int).Value = IIf(int_idtercerocontacto = 0, DBNull.Value, int_idtercerocontacto)
                .Parameters.Add("@fecha", SqlDbType.DateTime).Value = dte_fecha
                .ExecuteNonQuery()
            End With
            Nuevo = True
            If ObtenerID Then
                CargarUltimo()
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Crear el registro de tercerorelacion_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Function

    Public Sub Modificar()
        Dim obj_Conexion As New cls_Conexion
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "tercerorelacion__Modificar"
                .Parameters.Add("@idtercerorelacion", SqlDbType.Int).Value = int_idtercerorelacion
                .Parameters.Add("@tipo", SqlDbType.Int).Value = int_tipo
                .Parameters.Add("@idtercerotiporelacion", SqlDbType.Int).Value = IIf(int_idtercerotiporelacion = 0, DBNull.Value, int_idtercerotiporelacion)
                .Parameters.Add("@idtercero", SqlDbType.Int).Value = int_idtercero
                .Parameters.Add("@observaciones", SqlDbType.NVarChar).Value = str_observaciones
                .Parameters.Add("@idtercerocontacto", SqlDbType.Int).Value = IIf(int_idtercerocontacto = 0, DBNull.Value, int_idtercerocontacto)
                .Parameters.Add("@fecha", SqlDbType.DateTime).Value = dte_fecha
                .ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Modificar el registro de tercerorelacion_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Sub Eliminar(ByVal idtercerorelacion As Integer)
        Dim obj_Conexion As New cls_Conexion
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "tercerorelacion__Eliminar"
                .Parameters.Add("@idtercerorelacion", SqlDbType.Int).Value = idtercerorelacion
                .ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Eliminar el registro de tercerorelacion_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Function Buscar(ByVal idtercerorelacion As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            Buscar = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "tercerorelacion__Buscar"
                .Parameters.Add("@idtercerorelacion", SqlDbType.Int).Value = idtercerorelacion
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                Buscar = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Buscar el registro de tercerorelacion_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Sub CargarUltimo()
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "tercerorelacion__CargarUltimo"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarUltimo registro de tercerorelacion_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Sub

    Public Function CargarTodos() As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarTodos = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "tercerorelacion__CargarTodos"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarTodos = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarTodos los registros de tercerorelacion_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function


    Public Function CargarXidtercero(ByVal idtercero As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarXidtercero = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "tercerorelacion__CargarXidtercero"
                .Parameters.Add("@idtercero", SqlDbType.Int).Value = idtercero
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarXidtercero = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarTodos los registros de tercerorelacion_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function Clone() As Object Implements System.ICloneable.Clone
        Dim obj_tercerorelacion_Clon As New cls_tercerorelacion_
        obj_tercerorelacion_Clon.int_idtercerorelacion = Me.int_idtercerorelacion
        obj_tercerorelacion_Clon.int_tipo = Me.int_tipo
        obj_tercerorelacion_Clon.int_idtercerotiporelacion = Me.int_idtercerotiporelacion
        obj_tercerorelacion_Clon.int_idtercero = Me.int_idtercero
        obj_tercerorelacion_Clon.str_observaciones = Me.str_observaciones
        obj_tercerorelacion_Clon.int_idtercerocontacto = Me.int_idtercerocontacto
        obj_tercerorelacion_Clon.dte_fecha = Me.dte_fecha
        obj_tercerorelacion_Clon.col_Items = Me.col_Items
        Return obj_tercerorelacion_Clon
    End Function

End Class
